/**
 * @Author 赖治宇
 * @CreatedAt 2021/04/08 11:26
 * @UpdatedAt 2021/04/08 11:26
 * @Deascription 异步编程案例
 */

// 状态 pending resolve reject
// 执行单个promise的方法 then catch finally
// 多个promise执行的方法 all race any allSettled

const api = require('./api')

// 单个promise使用示例：
/** 获取用户列表
 * 查询列表数据
 * 找到单个数据
 * 在判断单个数据是否正确
 * 下一个异步操作依赖上一个异步操作
 * */
function getInfo() {
    api.fetchUserList().then(res => {
        console.log(res)
        const userlist = res
        const targetUser = userlist.find(item => item.user_id === 1)
        return targetUser
    }).then(res => {
        api.userLogin(res).then(res => {
            console.log('user login then', res)
            return res
        }).catch(err => {
            console.log('user login catch', err)
            return err
        }).finally((res) => {
            console.log('user login finally', res)
        })
    })
}
// TODO 调试打开
getInfo()

// 多个promise使用示例
/**
 * 获取首页信息
 * - 地址信息
 * - 天气信息
 * - 轮播图
 * - 商品信息
 */
api.initHomeData().then(res => {
    console.log('打印原始数据', res)
    const [address, weather, bannerList, goodsList] = res
    const data = {
        address: address.status === 'fulfilled' ? address.value : null,
        weather: weather.status === 'fulfilled' ? weather.value : null,
        bannerList: bannerList.status === 'fulfilled' ? bannerList.value : null,
        goodsList: goodsList.status === 'fulfilled' ? goodsList.value : []
    }
    return data
}).then(res => {
    console.log('打印获取的数据', res)
}).catch(err => {
    console.log('打印错误信息', err)
})

api.getAddress().then(res => {
    console.log('打印地址信息', res)
    return res
}).then(() => {
    api.getWeather().then(res => {
        api.getBanner(res).then(res => {
            api.getGoods(res).then(() => {
                loading = false
            })
        })
    })
})